package com.zx.crowdfunding.global;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;

import com.zx.crowdfunding.constant.CrowdFundingConstant;

/**
 * 全局静态变量类
 * @author 郑雪
 * @date 2021-12-15
 */
public class CrowdFundingGlobal {

	/**
	 * 资源权限集合（存放的是某个url对应的权限SPEL表达式）<br>
	 * 主要用在SpringSecurity资源授权的数据源
	 */
	public static List<Map<String, Object>> resourceAuthList;
	
	/**
	 * 其他代码权限集合（存放的是某个code对应的权限SPEL表达式）<br>
	 * 主要用在对页面中按钮或某个元素进行权限判断，进而控制其是否显示。
	 */
	public static Map<String, Map<String, Object>> CODE_AUTH;
	
	/**
	 * 是否需要更新资源权限集合
	 */
	public static Boolean UPDATE_RESOURCE_AUTH = true;
	
	/**
	 * 更新全局静态变量代码权限，同时更新application作用域中的代码权限
	 * @param codeAuthList 代码权限集合
	 * @param servletContext Servlet的上下文
	 */
	public static void updateGlobalCodeAuth(
				List<Map<String, Object>> codeAuthList, 
				ServletContext servletContext
			){
		// 为了后续简化开发，使用Map
    	Map<String, Map<String, Object>> codeAuthMap = new HashMap<String, Map<String,Object>>();
    	// 遍历集合
    	for (Map<String, Object> map : codeAuthList) {
    		// 获取权限的代码
    		String code = (String) map.get("CODE");
    		// 获取权限的SPEL表达式字符串
    		String spel = (String) map.get("SPEL");
    		if(spel == null || "".equals(spel)){
    			map.put("SPEL", true);
    		}
			// 存入Map对象中
    		codeAuthMap.put(code, map);
		}
    	// 赋值给全局静态变量，为了后续代码开发时使用
    	CrowdFundingGlobal.CODE_AUTH = codeAuthMap;
    	servletContext.setAttribute(CrowdFundingConstant.ATTR_NAME_CODE_AUTH, CrowdFundingGlobal.CODE_AUTH);
	}
}
